﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Transactions;
//using T.FAS.Runtime.DataModel.Dao;
//using T.FAS.Runtime.Metadata.Entity.DataModel;
//using T.FAS.Runtime.Metadata.SPI;
//using T.FAS.Runtime.Metadata.Entity;
//using Newtonsoft.Json;

//namespace T.FAS.Runtime.DataModel.Plugin
//{
//    /// <summary>
//    /// 数据库导出Json的Manager类
//    /// </summary>
//    public class DatabaseMetaEntityManager : IMetaReleaseManager
//    { 
//        private readonly DatabaseManager databaseManager = new DatabaseManager();

//        public IList<MetaDataExportContent> Export(IMetaDataContent[] metaDataList)
//        {
//            List<string> DBIds = metaDataList.Select(meta => meta.MetaDataID).ToList();
//            List<MetaDataExportContent> DBContents = new List<MetaDataExportContent>();
//            foreach (var Id in DBIds)
//            {
//                var db = databaseManager.GetMetaDataContent(Id);
//                MetaDataExportContent content = new MetaDataExportContent
//                {
//                    ExportType = MetaDataExportType.JSON,
//                    MetaDataId = Id,
//                    MetaDataType = nameof(Database)
//                };
//                content.Content = JsonConvert.SerializeObject(db, new JsonSerializerSettings
//                {
//                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
//                });
//                DBContents.Add(content);
//            }
//            return DBContents;
//        }

//        /// <summary>
//        /// 导入Database元数据，并在当前环境执行建库脚本
//        /// </summary>
//        /// <param name="contents"></param>
//        /// <param name="importStrategy"></param>
//        public void Import(IList<MetaDataExportContent> contents, MetaDataImportStrategy importStrategy)
//        {
//            List<Database> DBs = new List<Database>();
//            List<SQLItem> sqls = new List<SQLItem>();
//            DatabaseSQLBuilderFactory fac = new DatabaseSQLBuilderFactory();
//            foreach (var cnt in contents)
//            {
//                var db = JsonConvert.DeserializeObject<Database>(cnt.Content);
//                DBs.Add(db);
//                var dbtype = (DatabaseType)Enum.Parse(typeof(DatabaseType), db.DbType);
//                var builder = fac.GetBusinessSQLBuilder(dbtype);
//                sqls.AddRange(builder.BuildBusinessSQL(db));
//            }

//            try
//            {
//                //事务执行
//                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
//                {
//                    foreach (var db in DBs)
//                    {
//                        //保存DB元数据
//                        databaseManager.Save(db);
//                    }
//                    //在目标环境执行SQL语句 
//                    SQLExcutor.ExcuteSQLs(sqls);
//                }
//            }
//            catch (Exception e)
//            {

//                throw eeee;
//            }
//        }
//    }


//}
